/**
 * Title: Merge.java
 * @author WuJin
 * @date 2020年2月19日
 * @version 1.0
 */
package com.pm.utils;

import java.lang.reflect.Field;

/**
 * Title: Merge
 * @author WuJin
 * @date 2020年2月19日
 */
public class MergeObject {

    /**
     * @param sourceBean 被提取的对象bean
     * @param targetBean 用于合并的对象bean
     * @return targetBean 合并后的对象
     * @Title: combineSydwCore
     * @Description: 该方法是用于不同对象相同属性值的合并，如果两个不同对象中同一属性都有值，那么sourceBean中的值会覆盖tagetBean重点的值
     * @author: WangLongFei
     * @date: 2017年12月26日 下午1:53:19
     * @return: Object
     */
    public static Object combineSydwCore(Object sourceBean, Object targetBean) {
        if (sourceBean == null) {
            return targetBean;
        }
        Class<?> sourceBeanClass = sourceBean.getClass();
        Class<?> targetBeanClass = targetBean.getClass();

        Field[] sourceFields = sourceBeanClass.getDeclaredFields();
        Field[] targetFields = targetBeanClass.getDeclaredFields();
        for (int i = 0; i < sourceFields.length; i++) {
            Field sourceField = sourceFields[i];
            sourceField.setAccessible(true);
            try {
                if (!(sourceField.get(sourceBean) == null)) {
                    for (int j = 0; j < targetFields.length; j++) {
                        Field targetField = targetFields[j];
                        targetField.setAccessible(true);
                        if (sourceField.getName().equals(targetField.getName())) {
                            targetField.set(targetBean, sourceField.get(sourceBean));
                        }
                    }
                }
            } catch (IllegalArgumentException | IllegalAccessException e) {
                System.out.println("不存在字段");
                continue;
            }
        }
        return targetBean;
    }

}
